package br.uece.ativcomplementares.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.uece.ativcomplementares.enums.StatusAtividade;

@Inheritance(strategy=InheritanceType.JOINED)
@Entity
public class AtividadeAluno extends BaseEntity {

	private static final long serialVersionUID = 1L;

	@ManyToOne(optional=false)
	private Aluno aluno;
	
	@ManyToOne(optional=false, fetch=FetchType.EAGER)
	private AtividadeComplementar atividade;
	
	@ManyToOne
	private Professor professorAprovou;
	
	@ManyToOne
	private Periodo periodo;
	
	@Column
	private Integer horasCursadas;
	
	@Column(length=50)
	private String nome;
	
	@Enumerated
	private StatusAtividade status;
	
	@Temporal(TemporalType.TIMESTAMP) 
	//@Column(columnDefinition="TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP")
	@Column(nullable=false)
	private java.util.Date dataHoraCadastro;
	
	public AtividadeAluno() {
		status = StatusAtividade.AGUARDANDO_APROVACAO;
	}
	
	@OneToMany(cascade=CascadeType.ALL, mappedBy="atividadeAluno", orphanRemoval=true)
	private List<Certificado> certificados = new ArrayList<Certificado>();

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public AtividadeComplementar getAtividade() {
		return atividade;
	}

	public void setAtividade(AtividadeComplementar atividade) {
		this.atividade = atividade;
	}

	public Professor getProfessorAprovou() {
		return professorAprovou;
	}

	public void setProfessorAprovou(Professor professorAprovou) {
		this.professorAprovou = professorAprovou;
	}

	public Periodo getPeriodo() {
		return periodo;
	}

	public void setPeriodo(Periodo periodo) {
		this.periodo = periodo;
	}

	public Integer getHorasCursadas() {
		return horasCursadas;
	}

	public void setHorasCursadas(Integer horasCursadas) {
		this.horasCursadas = horasCursadas;
	}
	
	public StatusAtividade getStatus() {
		return status;
	}

	public void setStatus(StatusAtividade status) {
		this.status = status;
	}

	public List<Certificado> getCertificados() {
		return certificados;
	}

	public void setCertificados(List<Certificado> certificados) {
		this.certificados = certificados;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public void setDataHoraCadastro(java.util.Date dataHoraCadastro) {
		this.dataHoraCadastro = dataHoraCadastro;
	}

	public java.util.Date getDataHoraCadastro() {
		return dataHoraCadastro;
	}

	public String getView() {
		return getClass().getSimpleName().toLowerCase();
	}

}
